<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <input type="number" placeholder="骚年请输入任意正整数" id="ip">
    <button id="btn">行刑</button>
    <script>
        // 1. 编写一个函数，计算两个数字的和差积商
        function calc(a, b, operator) {
            switch (operator) {
                case "+":
                    return a + b;
                case "-":
                    return a - b;
                case "*":
                    return a * b;
                case "/":
                    return a / b;

                default:
                    return "送你离开千里之外 and find a valid operator";
            }
        }
        // console.log( calc(12,5,"+") );
        // console.log( calc(12,5,"-") );
        // console.log( calc(12,5,"*") );
        // console.log( calc(12,5,"/") );
        // console.log( calc(12,5,"doraemon") );

        // 2. 编写函数，求圆的面积
        function getCircleArea(radius) {
            return Math.PI * Math.pow(radius, 2)
        }
        // console.log( `庄哥的脸的半径是20cm，它的面子有${getCircleArea(20).toFixed(2)}平方厘米，庄哥真有面子！` );
        console.log(`庄哥的脸的半径是20cm，它的面子有${parseInt(getCircleArea(20))}平方厘米，庄哥真有面子！`);

        // 3. 编写函数，判断一个字符串的内容是不是纯数字
        function isNumberStr(str) {
            // 将该字符串尝试着转number
            // 如果得到nan 则转换失败 => 该字符串不是纯数字

            if (str === "0") {
                return true
            }

            // if(Number(str)===NaN){
            // if(!Number(str)){
            //     return false
            // }else{
            //     // 转换的结果不是nan(那就是一个好端端的数字)=>str是一个纯数字
            //     return true
            // }

            return !Number(str) ? false : true
        }

        // 4. 编写一个函数，计算三个数字的大小，按从小到大的顺序输出
        function sortThem(a, b, c) {
            switch (true) {
                case a <= b && b <= c:
                    console.log(a, b, c);
                    break;
                case a <= c && c <= b:
                    console.log(a, c, b);
                    break;
                case b <= a && a <= c:
                    console.log(b, a, c);
                    break;
                case b <= c && c <= a:
                    console.log(b, c, a);
                    break;
                case c <= a && a <= b:
                    console.log(c, a, b);
                    break;
                case c <= b && b <= a:
                    console.log(c, b, a);
                    break;

                default:
                    console.log("代码执行到此处可到前台免费领取男/女朋友一个+现金一个亿+珠江新城的别野一套");
                    break;
            }
        }
        // sortThem(1,2,3);
        // sortThem(1,3,2);
        // sortThem(2,1,3);
        // sortThem(2,3,1);
        // sortThem(3,1,2);
        // sortThem(3,2,1);

        // 5. 编写一个函数，在页面上输出一个N行M列的表格，表格内容填充0~100的随机数字
        function createTable(n, m) {
            // 写表头
            document.write("<table border=1 style='text-align:center;'>")

            for (var i = 0; i < n; i++) {
                // 输出一行
                document.write("<tr>")

                // 输出m个td
                for (var j = 0; j < m; j++) {
                    document.write(`<td style='width:50px'>${parseInt(Math.random() * 100)}</td>`)
                }

                document.write("</tr>")
            }

            // 写表尾
            document.write("</table>")
        }
        // createTable(3, 4)

        // 6. 编写一个函数，生成4位数字的验证码
        function createIdcode(n = 4) {
            var code = ""
            for (var i = 0; i < n; i++) {
                code += parseInt(Math.random() * 10)
            }
            return code
        }
        // console.log( createIdcode() );
        // console.log( createIdcode(6) );

        // 7. 求m-n之间数字的和
        function getSum(start, end) {
            var sum = 0
            for (var i = start; i <= end; i++) {
                sum += i
            }
            return sum
        }
        console.log(getSum(1, 100));

        // ----------
        // 8. 编写函数digit(num, k)，函数功能是：求整数num从右边开始的第k位数字的值，如果num位数不足k位则返回0。
        // digit(12345, 1) => 5
        // digit(12345, 2) => 4
        // digit(12345, 5) => 1
        // digit(12345, 6) => 0
        function digit(num, k) {
            if (num < Math.pow(10, k - 1)) {
                return 0
            }

            // 5    1234    
            // 4    123     
            // 3    12      
            // 2    1      
            // 1    0  
            var odd;
            for (var i = 0; i < k; i++) {
                // 把余数丢在一边
                odd = num % 10

                // 将num降级
                num = parseInt(num / 10)
            }

            return odd
        }
        // console.log(digit(12345, 1))
        // console.log(digit(12345, 2))
        // console.log(digit(12345, 5))
        // console.log(digit(12345, 6))

        // 9. 编写函数计算一个数字的长度
        // 123
        function getNumberLength(num) {
            var len = 1
            while (num >= Math.pow(10, len)) {
                len++
            }
            return len
        }
        // console.log( getNumberLength(1) );
        // console.log( getNumberLength(12) );
        // console.log( getNumberLength(123) );
        // console.log( getNumberLength(1234) );
        // console.log( getNumberLength(12345) );

        // 10. 编写一个函数，计算任意两个数字之间所能组成的奇数个数，数字必须是个位数。
        // 比如：计算0~3之间能组成的奇数是： 01、03、11、13、21、23、31、33
        function fn10(start, end) {
            for (var i = start; i <= end; i++) {
                // 捕获奇数一只
                if (i % 2 === 1) {
                    // 跟所有人搞一腿
                    for (var j = start; j <= end; j++) {
                        console.log(`${j}${i}`);
                    }
                }
            }
        }
        // fn10(0, 3)

        // 11. 某个公司采用公用电话传递数据，数据是四位的整数，在传递过程中是加密的，加密规则如下：
        // 每位数字都加上5,
        // 然后用除以10的余数代替该数字，
        // 再将第一位和第四位交换，
        // 第二位和第三位交换，
        // 请编写一个函数，传入原文，输出密文
        function createSecret(srcStr) {
            // 求字符串的长度
            // var len = srcStr.length

            var newstr = ""
            // 每一位都揪出来
            for (var i = 0; i < 4; i++) {
                // 取出字符串中的第i位（数数从0开始）
                var char = srcStr[i]

                // 每位数字都加上5,
                // 然后用除以10的余数代替该数字，
                var newchar = (char * 1 + 5) % 10
                newstr += newchar
            }

            // 再将第一位和第四位交换，
            // 第二位和第三位交换，
            //1234 //4321
            return `${newstr[3]}${newstr[2]}${newstr[1]}${newstr[0]}`
        }
        // console.log(createSecret("1234"));
        // console.log(createSecret("5678"));


        // 12. 编写一个函数，输入n为偶数时，调用函数求1/2+1/4+...+1/n,当输入n为奇数时，调用函数求1/1+1/3+...+1/n
        function createExpression(n) {
            if (n <= 0) {
                return "n必须大于0"
            }

            var expr = ""
            if (n % 2 === 1) {
                for (var i = 1; i <= n; i += 2) {
                    expr += `${i != 1 ? '+' : ''}1/${i}`
                }
            } else {
                for (var i = 2; i <= n; i += 2) {
                    expr += `${i != 2 ? '+' : ''}1/${i}`
                }
            }

            return expr
        }
        console.log(createExpression(7));
        console.log(createExpression(8));
        console.log(createExpression(0));


        // 13. 使用函数完成任意数字阶乘的计算
        function getJiecheng(n){
            var jc = 1
            for(var i=1;i<=n;i++){
                jc *= i
            }
            return jc
        }
        for(var i=1;i<=10;i++){
            console.log(i,getJiecheng(i));
        }

        // 14. 要求：页面输入任意数字，点击按钮后计算该数字的阶乘    
        btn.onclick = function(){
            var n = ip.value*1
            console.log(n,getJiecheng(n));
        }    
    </script>
</body>

</html>